package br.com.divulgaqui.service;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.jboss.logging.Logger;

import br.com.divulgaqui.client.ValorEspecificacaoServiceBeanLocal;
import br.com.divulgaqui.client.ValorEspecificacaoServiceBeanRemote;
import br.com.divulgaqui.client.exception.EntityIgualException;
import br.com.divulgaqui.entity.PKValorEspecificacao;
import br.com.divulgaqui.entity.ValorEspecificacao;
import br.com.divulgaqui.persistence.dao.ValorEspecificacaoDAO;
import br.com.divulgaqui.persistence.daoimpl.ValorEspecificacaoDAOImpl;

@Stateless
public class ValorEspecificacaoServiceBean implements ValorEspecificacaoServiceBeanLocal,ValorEspecificacaoServiceBeanRemote {

	@PersistenceContext
	private EntityManager entityManager;
	private ValorEspecificacaoDAO valorEspecificacaoDAO;
	private Logger logg = Logger.getLogger(ValorEspecificacaoServiceBean.class);
	
	public ValorEspecificacaoServiceBean() {		
	}
	
	@PostConstruct
    public void init(){    	
    	this.valorEspecificacaoDAO = new ValorEspecificacaoDAOImpl(this.entityManager);
    }

	@Override
	public void salvar(ValorEspecificacao valorEspecificacao) throws EntityIgualException {		
		ValorEspecificacao espec = this.valorEspecificacaoDAO.pesquisarValorEspecificacao(valorEspecificacao.getModelo().getId(), valorEspecificacao.getEspecificacao().getId());
		if(espec == null){
			PKValorEspecificacao pkValorEspecificacao = new PKValorEspecificacao(valorEspecificacao.getModelo().getId(), valorEspecificacao.getEspecificacao().getId());
			valorEspecificacao.setId(pkValorEspecificacao);
			this.valorEspecificacaoDAO.salvar(valorEspecificacao);
		}else{
			logg.warn("Especificação \""+valorEspecificacao.getEspecificacao().getCampo()+"\" já foi adicionada ao modelo");
			throw new EntityIgualException();
		}	
	}

	@Override
	public List<ValorEspecificacao> listar(ValorEspecificacao valorEspecificacao) {		
		return this.valorEspecificacaoDAO.listarValorEspecificacao(valorEspecificacao.getModelo().getId());
	}

	@Override
	public void excluir(ValorEspecificacao valorEspecificacao) {
		valorEspecificacao = this.valorEspecificacaoDAO.pesquisarValorEspecificacao(valorEspecificacao.getModelo().getId(), valorEspecificacao.getEspecificacao().getId());
		this.valorEspecificacaoDAO.excluir(valorEspecificacao);
	}

	@Override
	public void atualizar(ValorEspecificacao valorEspecificacao) {
		PKValorEspecificacao pkValorEspecificacao = new PKValorEspecificacao(valorEspecificacao.getModelo().getId(), valorEspecificacao.getEspecificacao().getId());
		valorEspecificacao.setId(pkValorEspecificacao);
		this.valorEspecificacaoDAO.atualizar(valorEspecificacao);
	}
	
}
